<!DOCTYPE html>
<html lang="zh-CN">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>06-返回顶部</title>
  <style>
    /* 样式初始化，清除默认的内外边距， * 星号表示选中所有标签 */
    * {
      margin: 0;
      padding: 0;
    }

    header {
      height: 150px;
      background-color: hotpink;
    }

    nav {
      height: 50px;
      background-color: #111;
    }

    main {
      height: 3000px;
      background-color: tan;
    }

    /* 版心 */
    .wrap {
      /* 统一的宽度 */
      width: 1200px;
      /* 水平居中 */
      margin: 0 auto;
    }

    #top {
      width: 100px;
      height: 100px;
      background-color: red;
      color: #fff;
      /* 固定定位 */
      position: fixed;
      /* 靠右边 50px 位置 */
      right: 50px;
      /* 靠底边 100px 位置 */
      bottom: 100px;
      /* Flex 盒子模型 */
      display: flex;
      /* Flex 主轴居中-水平 */
      justify-content: center;
      /* Flex 侧轴居中-垂直 */
      align-items: center;
      /* 变成小手 */
      cursor: pointer;
      /* 通过透明度隐藏 */
      opacity: 0;
      /* 产生过渡动画 */
      transition: all 0.5s;
    }

    /* 显示返回顶部的盒子 */
    .showTop {
      /* 通过透明度显示 */
      /*  !important   非常重要，可以用于提升样式优先级  */
      opacity: 1 !important;
    }
  </style>
</head>

<body>
  <!-- 头部部分 -->
  <header class="wrap">
    头部
  </header>
  <!-- 导航部分 - 需要做滚动固定 -->
  <nav>
    导航通栏
  </nav>
  <!-- 主体部分 -->
  <main class="wrap">
    主体
  </main>

  <div id="top">返回顶部</div>
  <script>
    // 需求分析
    //   1. 查找返回顶部的盒子
    //   2. 绑定点击事件
    //   3. 实现返回顶部，使用平滑效果

    var topBox = document.getElementById('top')

    topBox.addEventListener('click', function () {
      // alert('ok')
      //   window      窗口(浏览器)
      //   behavior    滚动行为
      //   smooth      平滑
      window.scrollTo({ top: 0, behavior: "smooth" })
    })

    // 需求分析
    //   1. 给文档绑定滚动事件
    //   2. 分支判断是否滚动到一定距离
    //   3. 设计透明度隐藏类名，添加类名显示，删除类名隐藏

    document.addEventListener('scroll', function () {
      // 获取 body 滚动出去的边界值
      var bianjie = document.body.getBoundingClientRect()

      // 判断是否到达了一定距离
      if (bianjie.top <= -150) {
        // 添加类名显示盒子
        topBox.classList.add('showTop')
      } else {
        // 删除类名隐藏盒子
        topBox.classList.remove('showTop')
      }

    })
  </script>
</body>

</html>